/**
 * @author xxxx.xx
 * @description 定义登录相关的数据接口方法
 */
import axios from 'axios'

import Ajax from './Ajax'

/**
 * 获取验证码的接口
 * @param {string} phone 电话号码
 * @returns Promise 请求回调
 */
function getVdtCodeApi(phone) {
    // (method) Axios.request(config: AxiosRequestConfig<D>): Promise
    // interface AxiosRequestConfig<D = any> {
    //     url?: string;
    //     method?: Method;
    //     baseURL?: string;
    //     transformRequest?: AxiosRequestTransformer | AxiosRequestTransformer[];
    //     transformResponse?: AxiosResponseTransformer | AxiosResponseTransformer[];
    //     headers?: AxiosRequestHeaders;
    //     params?: any;
    //     paramsSerializer?: (params: any) => string;
    //     data?: D;
    //     timeout?: number;
    //     timeoutErrorMessage?: string;
    //     withCredentials?: boolean;
    //     adapter?: AxiosAdapter;
    //     auth?: AxiosBasicCredentials;
    //     responseType?: ResponseType;
    //     xsrfCookieName?: string;
    //     xsrfHeaderName?: string;
    //     onUploadProgress?: (progressEvent: any) => void;
    //     onDownloadProgress?: (progressEvent: any) => void;
    //     maxContentLength?: number;
    //     validateStatus?: ((status: number) => boolean) | null;
    //     maxBodyLength?: number;
    //     maxRedirects?: number;
    //     socketPath?: string | null;
    //     httpAgent?: any;
    //     httpsAgent?: any;
    //     proxy?: AxiosProxyConfig | false;
    //     cancelToken?: CancelToken;
    //     decompress?: boolean;
    //     transitional?: TransitionalOptions;
    //     signal?: AbortSignal;
    //     insecureHTTPParser?: boolean;
    // }
    // 因为要使用async + await => 不能接受catch回调
    // axios.request({
    //     url: '/user/validate/code',
    //     method: 'POST',
    //     baseURL: '/apis',
    //     data: {phone},
    //     params: {phone},
    //     timeout: 5000
    // })
    // 重新返回一个只有resolve的Promise，async+await可以处理所有业务
    // return new Promise(resolve => {
    //     axios.request({
    //         url: '/user/validate/code',
    //         method: 'POST',
    //         baseURL: '/apis',
    //         // 在请求体传递参数 -- POST请求
    //         data: {phone},
    //         // 在请求地址上传递参数，就需要使用这个属性 -- GET请求
    //         params: {phone},
    //         timeout: 5000
    //     }).then(({data}) => {
    //         resolve(data)
    //     }).catch(e => {
    //         console.log(e)
    //         resolve({code: 888, message: '异步请求失败'})
    //     })
    // })
    return Ajax({
        url: '/user/validate/code',
        data: {phone}
    })
}

/**
 * 登录接口
 * @param {{phone: string, vdtCode: number}} data 登录参数
 * @returns Promise<any>
 */
export const loginApi = data => {
    return Ajax({
        url: '/user/app/login',
        data
    })
}

/**
 * 通过用户编码获取用户信息
 * @param {string} id 用户编码
 * @returns 
 */
export const userInfoApi = id => {
    return Ajax({
        url: '/user/info',
        method: 'GET',
        params: {id}
    })
}

/**
 * 免登录接口
 * @returns Promise
 */
export const autoLoginApi = () => Ajax({ url: '/user/auto/login' })

export {
    getVdtCodeApi
}